<?php

class Application_Model_Campanha
{
	 /**
	  * Adiciona nova campanha
	  * @param string $nome
	  * @param string $assunto
	  * @param string $remetente
	  * @param string $mensagem
	  * @param date $datacriacao
	  * @param datetime $dataenvio
	  * @param int $idusuario
	  * @param int $idlista
	  * @param int $idfiltro
	  */
	 public function addCampanha ($nome,$assunto,$remetente,$mensagem,$datacriacao,$dataenvio,$idusuario,$idlista,$idfiltro)
    {
        $data = array(
        				'nome' => $nome, 'assunto' => $assunto, 'remetente' => $remetente, 'mensagem'=>$mensagem, 
        				'datacriacao'=>$datacriacao, 'dataenvio'=>$dataenvio,'idusuario'=>$idusuario,
        				'idlista'=>$idlista,'idfiltro'=>$idfiltro, 'status'=>0
        			 );        
        $campanha = new Application_Model_DbTable_Campanha();
        $campanha->insert($data);
    }
    /**
     * Metodo para listar todas as campanhas não enviadas (rascunho)
     * @return array
     */
    public function listaAllCampanhasAtivas()
    {
        $campanha= new Application_Model_DbTable_Campanha();
        $select = $campanha->select()
            ->setIntegrityCheck(false)
            ->from(array('c' => 'campanha'))  
            ->where('c.status = 0')          
            ->order('dataenvio ASC');
            
        return $campanha->fetchAll($select);
    }
    /**
     * Lista todas as campanhas encerradas
     * @return Zend_Db_Table_Rowset_Abstract
     */    
    public function listaAllCampanhasEncerradas()
    {
        $campanha= new Application_Model_DbTable_Campanha();
        $select = $campanha->select()
            ->setIntegrityCheck(false)
            ->from(array('c' => 'campanha'))  
            ->where('c.status = 3')          
            ->order('dataenvio ASC');
            
        return $campanha->fetchAll($select);
    }
    /**
     * Metodo para contar todas as campanhas 
     */
    public function ContAllCampanhas()
    {
    	$campanha= new Application_Model_DbTable_Campanha();
        $select = $campanha->select()
            ->setIntegrityCheck(false)
            ->from(array('c' => 'campanha'))
            ->where('c.status = 0')
            ->columns(array('total'=>'COUNT(c.idcampanha)'));
            
        return $campanha->fetchAll($select);
    }
    public function ContAllCampanhasAtivas()
    {
    	$campanha= new Application_Model_DbTable_Campanha();
        $select = $campanha->select()
            ->setIntegrityCheck(false)
            ->from(array('c' => 'campanha'))
            ->columns(array('total'=>'COUNT(c.idcampanha)'))
            ->where('c.status = 3');
            
        return $campanha->fetchAll($select);
    }
    /**
     * Excluir uma campanha
     * @param int $idCampanha
     */
    public function excluirCampanha($idCampanha)
    {
    	$campanha = new Application_Model_DbTable_Campanha();
        $id = (int) $idCampanha;
        $where = $campanha->getAdapter()->quoteInto('idcampanha=?', $id); // removendo campanha
        $campanha->delete($where);
    }
    
    /**
     * Metodo para procurar campanha
     * @param int $idCampanha
     * @return array
     */
    public function procuraCampanha($idCampanha)
    {
    	$campanha = new Application_Model_DbTable_Campanha();
    	$select = $campanha->select()
    			->setIntegrityCheck(false)
	    		->from(array('c'=>'campanha'))
    			->where($campanha->getAdapter()->quoteInto('c.idcampanha=?', $idCampanha));
    	
       return $campanha->fetchAll($select)->toArray();
    }
    
    /**
     * Metodo para atualizar dados de uma campanha
     * @param int $idCampanha
     * @param string $nome
     * @param string $assunto
     * @param string $remetente
     * @param string $mensagem
     * @param date $datacriacao
     * @param datetime $dataenvio
     * @param int $idusuario
     * @param int $idlista
     * @param int $idfiltro
     */
    public function update($idCampanha, $nome,$assunto,$remetente,$mensagem,$dataenvio,$idlista,$idfiltro)
    {
    
    	$campanha= new Application_Model_DbTable_Campanha();
        $data = array('nome'=>$nome,'assunto'=>$assunto,
        			  'remetente'=>$remetente,'mensagem'=>$mensagem,'dataenvio'=>$dataenvio,
        			  'idlista'=>$idlista,'idfiltro'=>$idfiltro);
        
        $where = $campanha->getAdapter()->quoteInto('idcampanha=?', $idCampanha);
        $campanha->update($data, $where);
    	
    }
    public function updateStatus($status,$idcampanha)
    {
	    $campanha = new Application_Model_DbTable_Campanha();
	    $data = array('status'=>$status);
	    $where = $campanha->getAdapter()->quoteInto('idcampanha=?',$idcampanha);
	    $campanha->update($data, $where);
    }
    public function listaAllCampanhaEnviarAtiva()
    {
    	$Tbcampanha = new Application_Model_DbTable_Campanha();
    	$select = 'SELECT c.*
    			   FROM campanha_enviar ce, campanha c
    			   WHERE ce.status=1
    			   AND c.status = 1
    			   AND ce.idcampanha = c.idcampanha
    			   ORDER BY c.dataenvio ASC';
    	return $Tbcampanha->getAdapter()->fetchAll($select);
    }
    /**
     * Busca status de uma campanha pelo id
     * @param int $idcampanha
     * @return Ambigous <multitype:, mixed>
     */
    public function findStatusCampanha($idcampanha)
    {
    	$Tbcampanha = new Application_Model_DbTable_Campanha();
    	$select = 'SELECT c.status,c.processado
    			   FROM campanha c
    			   WHERE c.idcampanha='.$idcampanha;
    	return $Tbcampanha->getAdapter()->fetchRow($select);
    }
	/**
	 * Busca campanhas que foram indexadas e reordenadas
	 * @param int $idcampanhas
	 * @return Ambigous <multitype:, string, boolean, mixed>
	 * @since 01/05/2012
	 */
	public function findCampanhaBusca($idCampanha)
    {
    	$tb = new Application_Model_DbTable_Campanha();
            	$select = $tb->select()
    			->setIntegrityCheck(false)
	    		->from(array('c'=>'campanha'),array('c.idcampanha','c.nome','c.assunto','c.datacriacao','c.dataenvio'))
    			->where($tb->getAdapter()->quoteInto('c.idcampanha =?', $idCampanha));
        try {
        	$result = $tb->getAdapter()->fetchAll($select);	
        	return $result;
        }catch (Zend_Db_Exception $e)
        {
        	return $e;
        }
        
    }
    public function findCampanhaBuscaAvancada ($assunto,$dtinicial, $dtfinal)
    {
    	/*
    	 * SELECT c.idcampanha, 
    					  c.nome, 
    					  c.assunto, 
    					  c.datacriacao, 
    					  c.dataenvio 
    			   FROM campanha c
    			   WHERE (c.assunto like '%M%' OR c.nome like'%M%')
    			   AND c.dataenvio BETWEEN '2012-06-16' 
    			   AND '2012-06-18' 
    			   AND c.status = 3
    	 * */
    	
    	$tbcampanha = new Application_Model_DbTable_Campanha();
    	$sql = "SELECT c.idcampanha, 
    					  c.nome, 
    					  c.assunto, 
    					  c.datacriacao, 
    					  c.dataenvio 
    			   FROM campanha c
    			   WHERE (c.assunto like '%".$assunto."%' OR c.nome like '%".$assunto."%')
    			   AND c.dataenvio >= '$dtinicial' 
    			   AND c.dataenvio <= '$dtfinal' 
    			   AND c.status = 3";
    	$result = $tbcampanha->getAdapter()->fetchAll($sql);
    	return  $result;
    }

}

